/*
 * @Author: zi.yang
 * @Date: 2020-06-18 22:41:50
 * @LastEditTime: 2022-02-07 09:22:39
 * @LastEditors: zi.yang
 * @Description: 密码加密
 * @FilePath: \api-generator\app\utils\encryption.js
 */
'use strict';
const crypto = require('crypto');

class Encryption {
  /**
   * md5 算法
   * @param { String } plaintext 明文
   * @return { String }  加密文本
   */
  static $md5(plaintext) {
    const md5 = crypto.createHash('md5');
    const ciphertext = md5.update(plaintext).digest('base64');
    return ciphertext;
  }
  /**
   * sha1 算法
   * @param { String } plaintext 明文
   * @return { String }  加密文本
   */
  static $sha1(plaintext) {
    const shasum = crypto.createHash('sha1');
    const ciphertext = shasum.update(plaintext).digest('hex');
    return ciphertext;
  }
  /**
   * Hmac 算法
   * @param { String } plaintext 明文
   * @param { String } secretKey 秘钥
   * @return { String }  加密文本
   */
  static $hmac(plaintext, secretKey) {
    // Hmac算法：HMAC运算利用哈希算法，以一个密钥和一个消息为输入，生成一个消息摘要作为输出
    const hmac = crypto.createHmac('sha1', secretKey);
    const ciphertext = hmac.update(plaintext).digest('hex');
    return ciphertext;
  }
  /**
   * 密码加盐加密
   * @param { String } plaintext 明文
   * @param { String } salt 盐
   * @return { String } 加密文本
   */
  static $pwd(plaintext, salt) {
    const ciphertext = this.$sha1(salt + this.$md5(plaintext));
    return ciphertext;
  }
}
module.exports = Encryption;
